/* 
  Symbol数据类型，为对象添加独一无二的属性名
*/

const id = Symbol()
const name = Symbol('name')
const _name = Symbol('name')
const age = Symbol('age')
const obj = {
  [name]: 'jimmy',
  say () {
    console.log(this[name])
  },
  s: 's'
}

obj[_name] = 'jim'
obj[id] = 1
obj[age] = 20

console.log(obj)
obj.say()

// for in 循环无法获取，Object.keys，jSON.stringify无法获取对象的Symbol属性
for (const key in obj) {
  console.log(key)
}
console.log(Object.keys(obj))
console.log(JSON.stringify(obj))

// 获取对象的Symbol属性
console.log(Reflect.ownKeys(obj))
console.log(Object.getOwnPropertySymbols(obj))

// 同样的Symbol声明不相等
console.log(Symbol() === Symbol())
// 可以使用Symbol.for来相等，会将传入的属性值转为字符串类型
const s1 = Symbol.for('s')
const s2 = Symbol.for('s')
console.log(s1 === s2)
console.log(Symbol.for(true) === Symbol.for('true'))
